[アップデート]Step Functionsに高パフォーマンス低コストのExpressワークフローが追加されました! #reinvent
Step Functionsにアップデートがあり、短期間で大量な処理が行えるExpressワークフローが新機能として登場しました!
1秒あたり100,000イベントを超える呼び出しレートをサポートするよう設計されており、従来のステートマシン(以下、標準タイプ)の毎秒2,000イベントを大幅に超えるパフォーンスが出せそうです。
標準タイプとは異なる料金体系で、実行回数、実行時間、メモリ消費量に基づく料金が設定されています。その他についても異なる点がありますので、詳細については以下ドキュメントをご確認ください。
本エントリで高パフォーマンスの側面をガッツり検証したいところではありますが、秒間10万を投げるようなイベントがサクッとできそうになかったので、負荷はかけずExpressワークフローの作成から実行までをやってみたいと思います。
やってみた
ステートマシン定義
StepFunctionsコンソールにてステートマシンの作成をクリックすると、項目にタイプが追加されておりExpressが選択できるようになっています。
ステートマシン定義自体は、アクティビティタスクを除き、標準ワークフローの多くがサポートされていますので、大きな違いは見当たりません。 ここではLambda関数を起動するだけのステートマシンを定義しました。
いちおう定義も貼っておきます。
{ "Comment": "Test Express workflow", "StartAt": "StartState", "States": { "StartState": { "Type": "Task", "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:TestFunc", "End": true } } }
CloudWatch Logs
標準ワークフローのようにStepFunctions内で実行履歴が記録されないため、Expressワークフローでは、CloudWatch Logsへのロギング設定が必要となります。定義はこれだけなので、ステートマシンを作成します。
これで、StepFunctions Expressワークフローの準備が整いましたので、呼び出しもととなるイベントソースを作成します。
EventBridge
ここでは、S3に対するすべてのイベントをトリガーにExpressワークフローを実行してみたいと思います。EventBridgeのコンソールより、以下のイベントルールを作成します。 下記枠内にて、先程作成したExpress ワークフローとしてイベントターゲットとして選択しています。
イベントルールが作成できましたので、Expressワークフロー実行の準備が整いました。
Expressワークフロー実行(S3イベント)
任意のバケットにオブジェクトをプットしましたので、実行結果を見てみたいと思います。
ステートマシンの詳細画面を開くと標準タイプと少々異なっていました。
標準タイプ
Expressワークフロー
Expressワークフローでは、StepFunctions内で実行履歴が確認できないので、CWLがリンクされていました。
少々ごにょごにょしていたので、多数ログストリームが作成されてしまいました。
出力はこのような感じでExpressワークフローのインプットイベント等が確認できました。
また、CloudWatch メトリクスも確認することができました。
さいごに
現在、re:Inventナウでアップデートが大量にきており、その中の一つにStep Functionsのアップデートがありました。明後日にWernerによるKeynoteが控えているので、ワンちゃんStepFunctionsの他のアップデートにも期待してみたいと思います。